import axios from "axios";

const state = {
  user: null, // 用户对象
  token: null, // token
};
const getters = {
  isAuthenticated: state => !!state.user, // 判断用户是否登录
  stateUser: state => state.user, // 用户对象
  stateToken: state => state.token // token
};
const actions = {
  // 注册，成功后自动将用户登入
  async register({ dispatch }, form) {
    let err = await axios.post('users/register', form).then(res => {
      if ('error_code' in res.data)
        return res.data.error_code
    })
    // 注册成功则登录
    if (err !== 11) {
      let userForm = new FormData()
      userForm.append('username', form.username) // 用户名
      userForm.append('password', form.password) // 密码
      await dispatch('login', userForm)
    }
    return err
  },
  // 登录
  async login({ commit }, user) {
    return await axios.post('users/login', user).then(res => {
      if ('error_code' in res.data)
        return res.data.error_code
      commit('setUser', res.data.user) // 设置用户对象
      commit('setToken', res.data.token) // 设置用户token
      return 0
    })
  },
  // 登出
  async logout({ commit }) {
    commit('logout')
  },
  // 修改密码
  async resetPassword(_, form) {
    return await axios.post('users/reset_pwd', form).then(res => {
      if ('error_code' in res.data)
        return res.data.error_code
      return 0
    })
  },
  // 修改用户信息
  async updateUserInfo({ commit }, form) {
    await axios.post('users/update', form).then(res => {
      commit('setUser', res.data.user) // 设置用户对象
    })
  },
  // 注销用户
  async destroyUser({ commit }) {
    await axios.post('users/destroy')
    commit('logout')
  }
};

const mutations = {
  // 设置用户对象，其中包含了用户所有信息
  setUser(state, userObj) {
    state.user = userObj
  },
  // 设置Token
  setToken(state, token) {
    state.token = token
    localStorage.setItem("token", token)
  },
  // 登出时将用户和token置为空
  logout(state) {
    state.user = null
    state.token = null
    localStorage.removeItem("token")
  }
};

export default {
  state,
  getters,
  actions,
  mutations
}